using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class FacturasCompras : System.Web.UI.Page
{
    //ScriptManager scriptManager1 = ScriptManager.GetCurrent(P);
    protected void Page_Load(object sender, EventArgs e)
    {
        lb_errorBuscar.Visible = false;
        lb_fecharError.Visible = false;
       if(!Page.IsPostBack){
           tb_nroFacturaBuscar.Focus();
        }
           

    }
    protected void gv_facturasCompras_RowCommand(Object sender, GridViewCommandEventArgs e)
    {
        gv_facturasCompras.SelectedIndex = Convert.ToInt32(e.CommandArgument);

        GridViewRow row = gv_facturasCompras.SelectedRow;
    
        int cod_factura_compra = Convert.ToInt32(row.Cells[0].Text);
        if (e.CommandName == "ver")
        {
            fsFacturas.Visible = false;
            SqlDataSource_Detalles_facturas_compras.SelectParameters.Clear();
            SqlDataSource_Detalles_facturas_compras.SelectCommand = "select dc.cod_factura_compra, nro_renglon, dc.cod_producto, (select nombre from Productos where cod_producto = dc.cod_producto) as Nombre_Producto, (select descripcion from Marcas where cod_marca = (select cod_marca from Productos where cod_producto = dc.cod_producto))as Marca_Producto, cantidad, costo_unitario, importe_exento, importe_gravado, importe_me as Importe_moneda_extranjera from Detalles_Facturas_Compras as dc join Productos as p ON dc.cod_producto = p.cod_producto WHERE cod_factura_compra =" + cod_factura_compra;
            gv_detalles_factuas_compras.DataBind();

            p_detalles_facturas_compras.Visible = true;
            ib_okDetalle.Focus();
        }
       
       
    }
    protected void ib_guardar_Click(object sender, ImageClickEventArgs e)
    {
        int cod_orden_compra = Convert.ToInt32(tb_codOrdenCompraBuscar.Text);
        int nro_factura = Convert.ToInt32(tb_nroFacturaBuscar.Text);

        Facturas_Compras.agregarFacturasCompras(cod_orden_compra,nro_factura);
        Auditoria.guardarEvento(Session["usuario"].ToString(), cod_orden_compra.ToString(), "-", "-", "Factura Compras", "codigo orden compra");
        Auditoria.guardarEvento(Session["usuario"].ToString(), nro_factura.ToString(), "-", "-", "Factura Compras", "numero factura");
               
                
    

    }
    protected void buscarFacturaCompra(string cadena, string ingresado)
    {
        SqlDataSource_FacturasCompras.SelectParameters.Clear();
        SqlDataSource_FacturasCompras.SelectCommand = "select cod_factura_compra, cod_orden_compra as Orden_de_compra_correspondiente, nro_factura_compra, fecha, total_exento, total_gravado,importe_total, importe_total_me as Importe_en_moneda_extranjera, (select descripcion from Monedas where cod_moneda = cod_tipo_moneda) as Moneda_extranjera, f.cod_proveedor, p.nombre_empresa as Empresa_Proveedora from Facturas_Compras as f join Proveedores as p ON f.cod_proveedor = p.cod_proveedor WHERE  f." + cadena + " like @" + cadena;

        SqlDataSource_FacturasCompras.SelectParameters.Add(cadena, TypeCode.String, "%");
        SqlDataSource_FacturasCompras.SelectParameters[cadena].DefaultValue = ingresado + "%";

    }

    protected void buscarPorFecha(string fecha)
    {
        SqlDataSource_FacturasCompras.SelectParameters.Clear();
        SqlDataSource_FacturasCompras.SelectCommand = "select cod_factura_compra, cod_orden_compra as Orden_de_compra_correspondiente, nro_factura_compra, fecha, total_exento, total_gravado,importe_total, importe_total_me as Importe_en_moneda_extranjera, (select descripcion from Monedas where cod_moneda = cod_tipo_moneda) as Moneda_extranjera, f.cod_proveedor, p.nombre_empresa as Empresa_Proveedora from Facturas_Compras as f join Proveedores as p ON f.cod_proveedor = p.cod_proveedor WHERE CONVERT(varchar,fecha,103) = CONVERT(varchar, @fecha ,103)";

        SqlDataSource_FacturasCompras.SelectParameters.Add("fecha", TypeCode.DateTime, "%");
        SqlDataSource_FacturasCompras.SelectParameters["fecha"].DefaultValue = fecha;
        //gv_facturasCompras.DataBind();

    }
    protected void ib_buscar_Click(object sender, ImageClickEventArgs e)
    {
        try
        {
            int num = 0;
            if (tb_nroFacturaBuscar.Text != String.Empty)
            {
                buscarFacturaCompra("nro_factura_compra", tb_nroFacturaBuscar.Text);
                num++;
            }
            if (tb_codOrdenCompraBuscar.Text != String.Empty)
            {
                if (num == 0)
                {
                    buscarFacturaCompra("cod_orden_compra", tb_codOrdenCompraBuscar.Text);
                    num++;
                }
                else
                    SqlDataSource_FacturasCompras.SelectCommand += " and cod_orden_compra=@cod_orden";
                SqlDataSource_FacturasCompras.SelectParameters.Add("cod_orden", TypeCode.Int32, tb_codOrdenCompraBuscar.Text);
                num++;
            }
            if (tb_fechaBuscar.Text != String.Empty)
            {
                if (num == 0)
                {
                    if (Validar.validarFecha(tb_fechaBuscar.Text))
                    {
                        buscarPorFecha(tb_fechaBuscar.Text);
                    }
                    else
                    {
                        lb_fecharError.Visible = true;
                    }

                }
                else
                {
                    SqlDataSource_FacturasCompras.SelectCommand += " and CONVERT(varchar,fecha,103) = CONVERT(varchar, @fecha ,103)";
                    SqlDataSource_FacturasCompras.SelectParameters.Add("fecha", TypeCode.DateTime, tb_fechaBuscar.Text);

                }
            }
            gv_facturasCompras.DataBind();
        }
        catch
        {
            lb_errorBuscar.Visible = true;
        }
    }
    protected void ib_cancelar_Click(object sender, ImageClickEventArgs e)
    {
       tb_codOrdenCompraBuscar.Text = string.Empty;
       tb_nroFacturaBuscar.Text = string.Empty;
       gv_facturasCompras.DataBind();
       p_detalles_facturas_compras.Visible = false;
    }




    protected void ib_agregarFactura_Click(object sender, ImageClickEventArgs e)
    {
        tb_nroFacturaBuscar.Text = string.Empty;
        tb_codOrdenCompraBuscar.Text = string.Empty;
        tb_fechaBuscar.Text = string.Empty;
        ib_agregarFactura.Visible = false;
        ib_buscar.Visible = false;
        ib_reporte.Visible = false;
        ib_popUpOrdenCompra.Visible = true;
        fecha.Visible = false;
        lb_ejemploFecha.Visible = false;
        //scriptManager1.SetFocus(ib_guardarDetalle);
       
        
    }

    protected void ib_guardar_Click1(object sender, ImageClickEventArgs e)
    {
        Page.Validate("campoVacio");
        if (Page.IsValid){
            tb_nroFacturaBuscar.Focus();
            int cod_orden_compra = Convert.ToInt32(tb_codOrdenCompraBuscar.Text);
            long nro_factura = Convert.ToInt64(tb_nroFacturaBuscar.Text);
            try
            {
                Facturas_Compras.agregarFacturasCompras(cod_orden_compra, nro_factura);

            }
            catch (Exception error)
            {
                Response.Write("<SCRIPT language=\"javascript\"> window.alert(\"" + error.Message.ToString() + "\") </SCRIPT>");
    
            }
            ib_agregarFactura.Visible = true;
            
            ib_buscar.Visible = true;
            ib_reporte.Visible = true;
            ib_popUpOrdenCompra.Visible = false;
            
        } 
        
    }

    /*Se obtienen los datos de la fila seleccionada*/
    protected void gv_ordenesCompras_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        
        gv_ordenesCompras.SelectedIndex = Convert.ToInt32(e.CommandArgument);
        GridViewRow row = gv_ordenesCompras.SelectedRow;
        string cod_ordenCompra = row.Cells[0].Text;
        /*string nombreProveedor = row.Cells[1].Text;
        string apellidoProveedor = row.Cells[2].Text;
        string empresa = row.Cells[5].Text;*/
        
        if (e.CommandName == "agregar")
        {
            tb_codOrdenCompraBuscar.Text = cod_ordenCompra;
            /*tb_empresaProveedora.Text = empresa;
            tb_proveedor.Text = nombreProveedor;*/
            //p_popUpProveedor.Visible = false;
            //fs_proveedores.Visible = false;
            mpe_ordenesCompras.Hide();
           
            //AQUI AGREGAR PARA QUE APAREZCA EL GRIDVIEW DE DETALLES ORDENES COMPRAS PARA GUARDAR LA FACTURA
            /*SqlDataSource_DetallesOrdenesCompras.SelectParameters.Clear();
            SqlDataSource_DetallesOrdenesCompras.SelectCommand = "SELECT Detalles_Orden_Compras.cod_orden_compra, Detalles_Orden_Compras.nro_renglon, Productos.cod_producto, Productos.nombre, Detalles_Orden_Compras.costo_unitario, Detalles_Orden_Compras.cantidad, Detalles_Orden_Compras.cantidad_recibida, importe_gs, importe_me FROM Detalles_Orden_Compras INNER JOIN  Productos ON Detalles_Orden_Compras.cod_producto = Productos.cod_producto WHERE Detalles_Orden_Compras.cod_orden_compra = " + cod_ordenCompra;
            SqlDataSource_DetallesOrdenesCompras.SelectParameters.Add(cod_ordenCompra, TypeCode.String, "%");*/
            fsListaFacturas.Visible = false;
            //p_ListaFacturasCompras.Visible = false;
            //foreach (GridViewRow fila in gv_detallesOrdenesCompras.Rows)
            //{
            //    lb_nroRenglon.Text = fila.Cells[8].Text;
            //    lb_cantidadRecibida.Text = fila.Cells[4].Text;
            //}
            //p_detallesOrdenesCompras.Visible = true;
            fs_detallesOrdenesCompras.Visible = true;

            tb_codProveedorPopUp.Text = string.Empty;
            tb_codProveedorPopUp.Text = string.Empty;
            //ib_popUpOrdenCompra.Enabled = false;
            tb_nroFacturaBuscar.Focus();
            tb_codOrdenCompraBuscar.Enabled = false;
           
            //gv_detallesOrdenesCompras.DataBind();

            //SqlDataSource_DetallesOrdenesCompras.SelectParameters[cadena].DefaultValue = ingresado + "%";

        }
        else
        {
            mpe_ordenesCompras.Show();

        }


    }

    protected void mostrarPopUpOrdenesCompras()
    {
        //mpe_ordenesCompras.Hide();
       mpe_ordenesCompras.Show();
        //fs_proveedores.Visible = true;
        //p_popUpProveedor.Visible = true;
    }
    protected void ib_popUpOrdenCompra_Click(object sender, ImageClickEventArgs e)
    {
        mpe_ordenesCompras.Show();
        
    }

    protected void buscarOrdenCompra(string tabla, string cadena, string ingresado)
    {
        sqlDataSource_ordenesCompras.SelectParameters.Clear();


        sqlDataSource_ordenesCompras.SelectCommand = "SELECT cod_orden_compra, fecha, Ordenes_Compras.cod_proveedor, Ordenes_Compras.cod_moneda, importe_total, importe_total_me, Monedas.descripcion, nombre_empresa FROM Ordenes_Compras Join  Proveedores ON Ordenes_Compras.cod_proveedor = Proveedores.cod_proveedor INNER JOIN Monedas ON Monedas.cod_moneda = Ordenes_Compras.cod_moneda where Ordenes_Compras.estado = 'P' AND " + tabla + "." + cadena + " like @"+ cadena;
        //+ cadena + " like '" + ingresado + "%'"
        sqlDataSource_ordenesCompras.SelectParameters.Add(cadena, TypeCode.String, "%");
        sqlDataSource_ordenesCompras.SelectParameters[cadena].DefaultValue = ingresado + "%";

    }
    protected void ib_buscarPopUp_Click(object sender, ImageClickEventArgs e)
    {
        int num = 0;
        if (tb_codOrdenCompraPopUp.Text != String.Empty)
        {
            buscarOrdenCompra("Ordenes_Compras","cod_orden_compra", tb_codOrdenCompraPopUp.Text);
            mostrarPopUpOrdenesCompras();
            num++;
        }
        if (tb_codProveedorPopUp.Text != String.Empty)
        {
            if (num == 0)
            {
                buscarOrdenCompra("Proveedores","nombre_empresa", tb_codProveedorPopUp.Text);
                mostrarPopUpOrdenesCompras();
            }
            else
            
                sqlDataSource_ordenesCompras.SelectCommand += " and cod_orden_compra=@cod_orden";
                sqlDataSource_ordenesCompras.SelectParameters.Add("cod_orden", TypeCode.Int32, tb_codOrdenCompraPopUp.Text);
                num++;
            
            mostrarPopUpOrdenesCompras();
        }
        gv_ordenesCompras.DataBind();
    }
    protected void ib_cancelarPopUp_Click(object sender, ImageClickEventArgs e)
    {
        tb_codOrdenCompraPopUp.Text = "";
        tb_codProveedorPopUp.Text = "";
        mostrarTodasOrdenes();
       

    }

    protected void mostrarTodasOrdenes()
    {
        sqlDataSource_ordenesCompras.SelectParameters.Clear();


        sqlDataSource_ordenesCompras.SelectCommand = "SELECT cod_orden_compra, fecha, Ordenes_Compras.cod_proveedor, Ordenes_Compras.cod_moneda, importe_total, importe_total_me, Monedas.descripcion, Proveedores.nombre_empresa FROM Ordenes_Compras Join  Proveedores ON Ordenes_Compras.cod_proveedor = Proveedores.cod_proveedor INNER JOIN Monedas ON Monedas.cod_moneda = Ordenes_Compras.cod_moneda where Ordenes_Compras.estado = 'P' ";
        gv_ordenesCompras.DataBind();
    }
    protected void ib_cancelar_Click1(object sender, ImageClickEventArgs e)
    {

        Response.Redirect("~/Compras/FacturasCompras.aspx");
        //fecha.Visible = true;
        //lb_ejemploFecha.Visible = true;
        //tb_codOrdenCompraBuscar.Text = string.Empty;
        //tb_nroFacturaBuscar.Text = string.Empty;
        //fsListaFacturas.Visible = true;
        //gv_facturasCompras.DataBind();
        //fs_detallesOrdenesCompras.Visible = false;
        //p_detalles_facturas_compras.Visible = false;
        //ib_agregarFactura.Visible = true;
        //ib_reporte.Visible = true;
        //ib_buscar.Visible = true;
        //ib_popUpOrdenCompra.Enabled = true;
        //tb_codOrdenCompraBuscar.Enabled = true;
    }
    protected void ImageButton1_Click(object sender, ImageClickEventArgs e)
    {

        p_detalles_facturas_compras.Visible = false;
        fsFacturas.Visible = true;

    }

    protected void devuelve_maxCodFactura()
    {
        String cadena = (String)ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
        SqlConnection conexion = new SqlConnection(cadena);

        SqlCommand codigoFactura = new SqlCommand("Select max(cod_factura_compra) from Facturas_Compras", conexion);
        try
        {
            conexion.Open();
            codigoFactura.Connection = conexion;
            codigoFactura.CommandType = CommandType.Text;
            SqlDataReader read1 = codigoFactura.ExecuteReader();
            read1.Read();
            string respuesta = read1.GetValue(0).ToString();
            read1.Close();

            lb_resultado.Text = respuesta;
        }
        catch (Exception error)
        {
            Response.Write("<SCRIPT language=\"javascript\"> window.alert(\"" + error.Message.ToString() + "\") </SCRIPT>");

        }
        finally
        {

            conexion.Close();
        }
    }

    protected void ib_guardarDetalle_Click(object sender, ImageClickEventArgs e)
    {
        bool estado = false;

        Page.Validate("campoVacio");

        if (Page.IsValid)
        {
            int cod_orden_compra = Convert.ToInt32(tb_codOrdenCompraBuscar.Text);
            long nro_factura = Convert.ToInt64(tb_nroFacturaBuscar.Text);
            int cod_producto;
            int cantidad;
            int precio_uni;
            int cod_factura;
            int nro_renglon;
            string texto;
            int cantidad_pedida;
            int cantidadRecibidaHastaAhora;
            int cantidadRecibidaNva;

            try
            {

                Facturas_Compras.agregarFacturasCompras(cod_orden_compra, nro_factura);
                //SqlConnection conexion = new SqlConnection(cadena)
                devuelve_maxCodFactura();

                foreach (GridViewRow fila in gv_detallesOrdenesCompras.Rows)
                {
                    estado = ((CheckBox)fila.FindControl("chkSelect")).Checked;
                    if (estado)
                    {
                        texto = ((TextBox)fila.FindControl("tb_CantidadRecibida")).Text;
                        cod_factura = Convert.ToInt32(lb_resultado.Text);
                        cod_producto = Convert.ToInt32(fila.Cells[2].Text);
                        cantidad = Convert.ToInt32(texto);
                        precio_uni = Convert.ToInt32(fila.Cells[5].Text);
                        nro_renglon = Convert.ToInt32(fila.Cells[8].Text);
                        tb_cantidadRecibida.Text = texto;
                        cantidad_pedida = Convert.ToInt32(fila.Cells[3].Text);
                        cantidadRecibidaHastaAhora = Convert.ToInt32(fila.Cells[4].Text);
                        cantidadRecibidaNva = (cantidadRecibidaHastaAhora+cantidad);
                        rv_cantidadRecibida.MinimumValue = "1";
                        rv_cantidadRecibida.MaximumValue = Convert.ToString(cantidad_pedida - cantidadRecibidaHastaAhora);
                        Page.Validate("rangoCantidad");
                        if (Page.IsValid)
                        {
                            Facturas_Compras.agregarDetallesFacturasCompras(cod_factura, cod_producto, cantidad, precio_uni);
                            Auditoria.guardarEvento(Session["usuario"].ToString(), nro_factura.ToString(), "-", "-", "Factura Compras", "Numero factura");
                            Auditoria.guardarEvento(Session["usuario"].ToString(), cod_producto.ToString(), "-", "-", "Factura Compras", "Codigo producto");
                            Auditoria.guardarEvento(Session["usuario"].ToString(), cantidad.ToString(), "-", "-", "Factura Compras", "Cantidad");

                            Facturas_Compras.actualizarCantidadRecibidaOC(cod_orden_compra, nro_renglon, cantidadRecibidaNva);
                            gv_detalles_factuas_compras.DataBind();
                            ib_agregarFactura.Visible = true;
                            ib_buscar.Visible = true;
                            ib_reporte.Visible = true;
                            ib_popUpOrdenCompra.Visible = false;
                            fs_detallesOrdenesCompras.Visible = false;
                            fsListaFacturas.Visible = true;
                            fecha.Visible = true;
                            lb_ejemploFecha.Visible = true;
                            tb_codOrdenCompraBuscar.Text = string.Empty;
                            tb_fechaBuscar.Text = string.Empty;
                            tb_nroFacturaBuscar.Text = string.Empty;

                        }
                        else
                        {
                            Facturas_Compras.eliminarFacturasCompras(cod_factura);
                        }

                        gv_facturasCompras.DataBind();
                        //lb_nroRenglon.Text = fila.Cells[8].Text;
                        //lb_cantidadRecibida.Text = fila.Cells[9].Text;




                    }
                }

            }

            catch (Exception error)
            {
                Response.Redirect("Error.aspx");

            }

            finally
            {
            }


        }
    }



    protected void ib_reporte_Click(object sender, ImageClickEventArgs e)
    {
        Response.Redirect("~/ReporteFacturasCompras.aspx");
    }
}
    
